<?php

namespace App\Services\Netease;

class UserServices extends BaseServices
{
    /**
     * 创建云信ID
     * 1.第三方帐号导入到云信平台；
     * 2.注意accid，name长度以及考虑管理秘钥token
     * @param  $accid 用户accid
     * @param  $name [云信ID昵称，最大长度64字节，用来PUSH推送时显示的昵称]
     * @param  $props [json属性，第三方可选填，最大长度1024字节]
     * @param  $icon [云信ID头像URL，第三方可选填，最大长度1024]
     * @param  $token [云信ID可以指定登录token值，最大长度128字节，并更新，如果未指定，会自动生成token，并在创建成功后返回]
     * @return $result    [返回array数组对象]
     */
    public function createUser($accid, $name = '', $props = '{}', $icon = '', $token = '')
    {
        if (empty($accid)) {
            return false;
        }
        $url = $this->url . 'user/create.action';
        $data = array(
            'accid' => $accid,
            'name' => $name,
            'props' => $props,
            'icon' => $icon,
            'token' => $token
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 更新用户名片
     * @param  $accid 用户accid
     * @param  $name [云信ID昵称，最大长度64字节，用来PUSH推送时显示的昵称]
     * @param  $icon [用户icon，最大长度256字节]
     * @param  $sign [用户签名，最大长度256字节]
     * @param  $email [用户email，最大长度64字节]
     * @param  $birth [用户生日，最大长度16字节]
     * @param  $mobile [用户mobile，最大长度32字节]
     * @param  $ex [用户名片扩展字段，最大长度1024字节，用户可自行扩展，建议封装成JSON字符串]
     * @param  $gender [用户性别，0表示未知，1表示男，2女表示女，其它会报参数错误]
     * @return $result      [返回array数组对象]
     */
    public function updateUinfo($accid, $name = '', $icon = '', $sign = '', $email = '', $birth = '', $mobile = '', $gender = '0', $ex = '')
    {
        if (empty($accid)) {
            return false;
        }
        $url = $this->url . 'user/updateUinfo.action';
        $data = array(
            'accid' => $accid,
            'name' => $name,
            'icon' => $icon,
            'sign' => $sign,
            'email' => $email,
            'birth' => $birth,
            'mobile' => $mobile,
            'gender' => $gender,
            'ex' => $ex
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 获取用户名片，可批量
     * @param  $accids 用户accid
     * @return $result    [返回array数组对象]
     */
    public function getUinfos($accids)
    {
        if (empty($accids)) {
            return false;
        }
        $url = $this->url . 'user/getUinfos.action';
        $data['accids'] = toJson($accids);
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 设置桌面端在线时，移动端是否需要推送
     * @param  $accids
     *$donnopOpen  String  桌面端在线时，移动端是否不推送：true:移动端不需要推送，false:移动端需要推送
     * @return $result    [返回array数组对象]
     */
    public function setDonnop($accids, $donnopOpen)
    {
        if (empty($accids) || empty($donnopOpen)) {
            return false;
        }
        $url = $this->url . 'user/setDonnop.action';
        $data = array(
            'accid' => $accids,
            'donnopOpen' => $donnopOpen,
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 账号全局禁言
     * @param  $accids
     * $mute  String  是否全局禁言：true：全局禁言，false:取消全局禁言
     * @return $result    [返回array数组对象]
     */
    public function mute($accids, $mute)
    {
        if (empty($accids) || empty($donnopOpen)) {
            return false;
        }
        $url = $this->url . 'user/mute.action';
        $data = array(
            'accid' => $accids,
            'mute' => $mute,
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 好友关系-加好友
     * @param  $accid 加好友发起者accid
     * @param  $faccid 加好友接收者accid
     * @param  $types  1直接加好友，2请求加好友，3同意加好友，4拒绝加好友
     * @param  $msg  加好友对应的请求消息，第三方组装，最长256字符
     * @return $result      [返回array数组对象]
     */
    public function addFriend($accid, $faccid, $types = '1', $msg = '')
    {
        if (empty($accid) || empty($faccid)) {
            return false;
        }
        $url = $this->url . 'friend/add.action';
        $data = array(
            'accid' => $accid,
            'faccid' => $faccid,
            'type' => $types,
            'msg' => $msg
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 好友关系-更新好友信息
     * @param  $accid 用户accid
     * @param  $faccid [要修改朋友的accid]
     * @param  $alias [给好友增加备注名]
     * @return $result      [返回array数组对象]
     */
    public function updateFriend($accid, $faccid, $alias)
    {
        if (empty($accid) || empty($faccid)) {
            return false;
        }
        $url = $this->url . 'friend/update.action';
        $data = array(
            'accid' => $accid,
            'faccid' => $faccid,
            'alias' => $alias
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 好友关系-删除好友信息
     * @param  $accid 用户accid
     * @param  $faccid [要修改朋友的accid]
     * @return $result      [返回array数组对象]
     */
    public function deleteFriend($accid, $faccid)
    {
        if (empty($accid) || empty($faccid)) {
            return false;
        }
        $url = $this->url . 'friend/delete.action';
        $data = array(
            'accid' => $accid,
            'faccid' => $faccid
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 好友关系-获取好友列表
     * @param  $accid 用户accid
     * @return $result      [返回array数组对象]
     */
    public function getFriend($accid)
    {
        if (empty($accid)) {
            return false;
        }
        $url = $this->url . 'friend/get.action';
        $data = array(
            'accid' => $accid,
            'createtime' => (string)(time() * 1000)
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 好友关系-设置黑名单
     * @param  $accid [用户accid
     * @param  $targetAcc [被加黑或加静音的帐号]
     * @param  $relationType [本次操作的关系类型,1:黑名单操作，2:静音列表操作]
     * @param  $value [操作值，0:取消黑名单或静音；1:加入黑名单或静音]
     * @return $result      [返回array数组对象]
     */
    public function specializeFriend($accid, $targetAcc, $relationType = '1', $value = '1')
    {
        if (empty($accid) || empty($targetAcc)) {
            return false;
        }
        $url = $this->url . 'user/setSpecialRelation.action';
        $data = array(
            'accid' => $accid,
            'targetAcc' => $targetAcc,
            'relationType' => $relationType,
            'value' => $value
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 好友关系-查看黑名单列表
     * @param  $accid 用户accid
     * @return $result      [返回array数组对象]
     */
    public function listBlackFriend($accid)
    {
        if (empty($accid)) {
            return false;
        }
        $url = $this->url . 'user/listBlackAndMuteList.action';
        $data = array(
            'accid' => $accid
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 封禁用户
     * @param  $accid [待封禁的云信账号]
     * @return $result      [返回array数组对象]
     */
    public function BlackUser($accid)
    {
        if (empty($accid)) {
            return false;
        }
        $url = $this->url . 'user/block.action';
        $data = array(
            'accid' => $accid
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

    /**
     * 解禁用户
     * @param  $accid [待封禁的云信账号]
     * @return $result      [返回array数组对象]
     */
    public function unblockUser($accid)
    {
        if (empty($accid)) {
            return false;
        }
        $url = $this->url . 'user/unblock.action';
        $data = array(
            'accid' => $accid
        );
        $result = $this->postDataCurl($url, $data);
        return resultNeteaseInfo($result);
    }

}
